Nominal Typing, Structural Typing
2019/01/21
なにこれ
型システムの型検査の手法みたいなもの
Nominal Typing
名目上の型。名前的型。
クラスなどの型を内部構造を見て判断するのではなく、型についた名前で識別する
Structual Typing
構造的型。
クラスなどの型を内部構造を見て判断する。
名前が違っても同じ構造の型はコンパイルエラーにならない。
何か問題でも?
名前しか見てくれないと、同じStringを持つクラスではあるが、エンコード済 / notで違うプロパティを持たせたい時とかに、型検査でエンコード済かをチェックできないので困る
解決法
実装内部では使われない型パラメータを用いて、コンパイラレベルで値を区別するのが 幽霊型(Phantom Type)
TypeScriptでやらせようとするにはそこそこたいへん(自分で実装する必要ある)
参考